package com.dingding.special.user.login.service.impl;

import javax.annotation.Resource;

import org.apache.http.HttpStatus;
import org.springframework.stereotype.Component;

import com.dingding.common.core.base.dto.AbstractValiResponse;
import com.dingding.common.core.base.dto.ResponseEntity;
import com.dingding.common.core.util.paravalidate.ValiResult;
import com.dingding.common.core.util.paravalidate.ValidateUtil;
import com.dingding.special.user.login.dao.IUserLoginAddUserInfoToCache;
import com.dingding.special.user.login.dao.IUserLoginDao;
import com.dingding.special.user.login.dto.ReqSpecialUserLoginDTO;
import com.dingding.special.user.login.dto.ResSpecialUserLoginDTO;
import com.dingding.special.user.login.message.SpecialUserLoginStatusMsg;
import com.dingding.special.user.login.service.IUserLoginService;
import com.dingding.special.user.validate.service.IValidateCodeService;

/**
 * 
 * @ClassName: SpecialUserLoginImpl 
 * @Description: 用户登录操作 
 * @author CHEHAUNBO 
 * @date 2016年8月21日 下午3:12:27
 * @since V2.4.0
 * 
 */
@Component("specialUserLoginService")
public class SpecialUserLoginServiceImpl extends AbstractValiResponse implements IUserLoginService {

	@Resource(name = "validateCodeService")
	private IValidateCodeService validateCodeService;

	@Resource(name = "specialUserLoginDao")
	private IUserLoginDao userLoginDao;

	@Resource(name = "addUserInfoToCacheDao")
	private IUserLoginAddUserInfoToCache userLoginAddUserInfoDao;

	/**
	 * 
	 * 用户登录
	 * 
	 * @Title: login 
	 * @return boolean true 成功 false 失败
	 * @author CHEHAUNBO
	 * @since V2.4.0
	 * 
	 */
	@Override
	@SuppressWarnings("unchecked")
	public ResponseEntity<ResSpecialUserLoginDTO> login(ReqSpecialUserLoginDTO reqSpecialUserLoginDTO) {

		ValiResult valiResult = ValidateUtil.validateBeanIsAvaliable(reqSpecialUserLoginDTO,
				ReqSpecialUserLoginDTO.class);
		// 参数不合法，存在空值
		if (!valiResult.isAvailable()) {
			return super.error(valiResult);
		}
		
		// 这两个电话号码无需验证
		if(!reqSpecialUserLoginDTO.getUserName().equals("13000001111") && !reqSpecialUserLoginDTO.getUserName().equals("18201320582")){
			
			// 判断验证码是否正确
			if (!validateCode(reqSpecialUserLoginDTO)) {
				return super.error(HttpStatus.SC_FORBIDDEN, SpecialUserLoginStatusMsg.TELPHONECODE_ERROR,
						SpecialUserLoginStatusMsg.TELPHONECODE_ERROR);
			}
			
		}
		
		// 获取用户登录信息
		ResSpecialUserLoginDTO specialUserLoginDTO = userLoginDao
				.getUserLoginInfoByTelPhone(reqSpecialUserLoginDTO.getUserName());
		if (specialUserLoginDTO != null) { // 非第一次登录
			// 更改用户状态为登录状态
			userLoginDao.updateUserLoginInfo(reqSpecialUserLoginDTO, specialUserLoginDTO);
		} else {
			// 第一次登录，初始化用户信息，并将状态设为已登录
			specialUserLoginDTO = new ResSpecialUserLoginDTO();
			
			userLoginDao.addUserInfo(specialUserLoginDTO, reqSpecialUserLoginDTO);
		}

		return super.success(specialUserLoginDTO, HttpStatus.SC_OK);

	}

	/**
	 * 
	 * 调用验证模块服务进行验证码验证
	 * 
	 * @Title: validateCode 
	 * @param reqSpecialUserLoginDTO
	 * @return boolean true 成功 false 失败
	 * @author CHEHAUNBO
	 * @since V2.4.0
	 * 
	 */
	private boolean validateCode(ReqSpecialUserLoginDTO reqSpecialUserLoginDTO) {
		return validateCodeService.telPhoneCodeValidate(reqSpecialUserLoginDTO.getUserName(),
				String.valueOf(reqSpecialUserLoginDTO.getValidateNum()));
	}

}
